home *** CD-ROM | disk | FTP | other *** search
/ The Java 3D API Specification (2nd Edition) / The Java 3D API Specification (2nd Edition).iso / programs / examples / ReadRaster / ReadRaster.java < prev   
Text File  |  2000-04-28  |  7KB  |  194 lines

  1. /*
  2.  *    @(#)ReadRaster.java 1.7 00/02/10 13:15:01
  3.  *
  4.  * Copyright (c) 1996-2000 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
  7.  * modify and redistribute this software in source and binary code form,
  8.  * provided that i) this copyright notice and license appear on all copies of
  9.  * the software; and ii) Licensee does not utilize the software in a manner
  10.  * which is disparaging to Sun.
  11.  *
  12.  * This software is provided "AS IS," without a warranty of any kind. ALL
  13.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
  14.  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
  15.  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
  16.  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
  17.  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
  18.  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
  19.  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
  20.  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
  21.  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
  22.  * POSSIBILITY OF SUCH DAMAGES.
  23.  *
  24.  * This software is not designed or intended for use in on-line control of
  25.  * aircraft, air traffic, aircraft navigation or aircraft communications; or in
  26.  * the design, construction, operation or maintenance of any nuclear
  27.  * facility. Licensee represents and warrants that it will not use or
  28.  * redistribute the Software for such purposes.
  29.  */
  30.  
  31. import java.applet.Applet;
  32. import java.awt.BorderLayout;
  33. import java.awt.event.*;
  34. import java.awt.image.DataBufferInt;
  35. import java.awt.image.BufferedImage;
  36. import java.awt.GraphicsConfiguration;
  37. import com.sun.j3d.utils.applet.MainFrame;
  38. import com.sun.j3d.utils.geometry.ColorCube;
  39. import com.sun.j3d.utils.universe.*;
  40. import javax.media.j3d.*;
  41. import javax.vecmath.*;
  42. import java.util.Enumeration;
  43.  
  44. public class ReadRaster extends Applet {
  45.  
  46.     public BranchGroup createSceneGraph(BufferedImage bImage, 
  47.                     Raster readRaster) {
  48.  
  49.     // Create the root of the branch graph
  50.     BranchGroup objRoot = new BranchGroup();
  51.  
  52.     // Create a Raster shape. Add it to the root of the subgraph
  53.  
  54.         ImageComponent2D drawImageComponent = new ImageComponent2D(
  55.         ImageComponent.FORMAT_RGB, bImage);
  56.  
  57.         Raster drawRaster= new Raster(new Point3f(0.0f, 0.0f, 0.0f),
  58.         Raster.RASTER_COLOR, 0, 0, bImage.getWidth(), 
  59.         bImage.getHeight(), drawImageComponent, null);
  60.     Shape3D shape = new Shape3D(drawRaster);
  61.     drawRaster.setCapability(Raster.ALLOW_IMAGE_WRITE);
  62.     objRoot.addChild(shape);
  63.  
  64.     // Ceate the transform greup node and initialize it to the
  65.     // identity.  Enable the TRANSFORM_WRITE capability so that
  66.     // our behavior code can modify it at runtime.  Add it to the
  67.     // root of the subgraph.
  68.     TransformGroup objTrans = new TransformGroup();
  69.     objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  70.  
  71.         TransformGroup cubeScale = new TransformGroup();
  72.         Transform3D t3d = new Transform3D();
  73.         t3d.setTranslation(new Vector3d(-0.5, 0.5, 0.0));
  74.         cubeScale.setTransform(t3d);
  75.  
  76.         cubeScale.addChild(objTrans);
  77.         objRoot.addChild(cubeScale);
  78.  
  79.     // Create a simple shape leaf node, add it to the scene graph.
  80.     objTrans.addChild(new ColorCube(0.3));
  81.  
  82.     // Create a new Behavior object that will perform the desired
  83.     // operation on the specified transform object and add it into
  84.     // the scene graph.
  85.     Transform3D yAxis = new Transform3D();
  86.     Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE,
  87.                     0, 0,
  88.                     4000, 0, 0,
  89.                     0, 0, 0);
  90.     myRotationInterpolator rotator =
  91.         new myRotationInterpolator(drawRaster, readRaster,
  92.                      rotationAlpha, objTrans, yAxis,
  93.                      0.0f, (float) Math.PI*2.0f);
  94.     BoundingSphere bounds =
  95.         new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
  96.     rotator.setSchedulingBounds(bounds);
  97.     objTrans.addChild(rotator);
  98.  
  99.         // Have Java 3D perform optimizations on this scene graph.
  100.         objRoot.compile();
  101.  
  102.     return objRoot;
  103.     }
  104.  
  105.     public ReadRaster() {
  106.  
  107.         int width = 128;
  108.     int height = 128;
  109.  
  110.     ImageComponent2D readImageComponent = new ImageComponent2D(
  111.         ImageComponent.FORMAT_RGB, width, height);
  112.  
  113.     Raster readRaster = new Raster(new Point3f(0.0f,0.0f,0.0f),
  114.                        Raster.RASTER_COLOR, 0, 0, width,
  115.                        height, readImageComponent, null);
  116.  
  117.     setLayout(new BorderLayout());
  118.         GraphicsConfiguration config =
  119.            SimpleUniverse.getPreferredConfiguration();
  120.  
  121.     Canvas3D c = new myCanvas3D(config, readRaster);
  122.     add("Center", c);
  123.  
  124.     // Create a simple scene and attach it to the virtual universe
  125.     BufferedImage bImage = new BufferedImage(width, height,
  126.                          BufferedImage.TYPE_INT_ARGB);
  127.  
  128.     BranchGroup scene = createSceneGraph(bImage, readRaster);
  129.     SimpleUniverse u = new SimpleUniverse(c);
  130.  
  131.         // This will move the ViewPlatform back a bit so the
  132.         // objects in the scene can be viewed.
  133.         u.getViewingPlatform().setNominalViewingTransform();
  134.  
  135.     u.addBranchGraph(scene);
  136.     }
  137.  
  138.     //
  139.     // The following allows ReadRaster to be run as an application
  140.     // as well as an applet
  141.     //
  142.     public static void main(String[] args) {
  143.     new MainFrame(new ReadRaster(), 256, 256);
  144.     }
  145. }
  146.  
  147.  
  148. class myCanvas3D extends Canvas3D {
  149.  
  150.     Raster readRaster;
  151.     GraphicsContext3D gc;
  152.  
  153.     public myCanvas3D(GraphicsConfiguration graphicsConfiguration,
  154.     Raster readRaster) {
  155.  
  156.     super(graphicsConfiguration);
  157.     this.readRaster = readRaster;
  158.         gc = getGraphicsContext3D();
  159.     }
  160.  
  161.     public void postSwap() {
  162.     super.postSwap();
  163.         gc.readRaster(readRaster);
  164.     }
  165. }
  166.  
  167.  
  168. class myRotationInterpolator extends RotationInterpolator {
  169.     Point3f wPos = new Point3f(0.025f, -0.025f, 0.0f);
  170.     Raster drawRaster;
  171.     Raster readRaster;
  172.  
  173.     public myRotationInterpolator(Raster drawRaster, Raster readRaster,
  174.                 Alpha alpha,
  175.                                 TransformGroup target,
  176.                                 Transform3D axisOfRotation,
  177.                                 float minimumAngle,
  178.                                 float maximumAngle) {
  179.  
  180.     super(alpha, target, axisOfRotation, minimumAngle, maximumAngle); 
  181.         this.drawRaster = drawRaster;
  182.         this.readRaster = readRaster;
  183.     }
  184.  
  185.     public void processStimulus(Enumeration criteria) {
  186.  
  187.         ImageComponent2D newImageComponent = new ImageComponent2D(
  188.         ImageComponent.FORMAT_RGB, readRaster.getImage().getImage());
  189.  
  190.     drawRaster.setImage(newImageComponent);
  191.     super.processStimulus(criteria);
  192.     }
  193. }
  194.